SAS小白入门第二节:SAS数据类型和格式化(输入和输出)

您所在的位置:网站首页 sas datetime转日期 SAS小白入门第二节:SAS数据类型和格式化(输入和输出)

SAS小白入门第二节:SAS数据类型和格式化(输入和输出)

2023-11-09 20:19| 来源: 网络整理| 查看: 265

数据类型

在其他编程语言中,有各种各样的数据类型,但是总体上,可大致分为:数值型,字符型和日期型,而SAS中的数据类型,只有2中数据类型:字符型和数值型。在这里,你会发现,日期型的去哪了?在SAS程序中,日期默认是作为数值型的,所有的日期类型的变量都会被作为输入日期与1960年1月1日之差。例如今天是20191208,它显示的就是21891(这个数字哪来的,你猜猜?),如果你想显示成日期型,那么你得设定相应的日期格式。这个怎么个相应的日期格式,就是咱们下面讲的格式化。

SAS变量的输入格式

输入格式:input 变量1 输入格式1 变量2 输入格式2 ...;

1.数值型的输入格式

数值型的数据格式主要是w.d。其中w表示数值的总位数或者说宽度(包括小数点),d表示数值的小数部分的位数,如6.2表示:数据宽度是6,2位小数点,整数位是4。2. 表示总位数是2,没有小数点。

由左边图显示:咱们输入性别代码,1和2,理论上应该都是整数,但是你加了小数位数,有2位小数,但是实际上没有,SAS会把自己默认降为小数,并且满足2位小数的宽度。你看这就和你想要的数据不一样了

所以,在做程序设计的时候,一定要设置好,数据格式。

练一练:看看下面的例子,看看是否跟你想象中要展示的数据是否一样?

2.字符串输入格式

字符串变量的输入格式是$ w. 其中$符号是必须加的,w表示字节数,一个中文占2个字节,SAS的默认宽度是8,如果超过8位,需要加上宽度值,以保证能够全部读上,否则就只会读8位,多余的截掉,以下示例:

看到无论是数值型,还是字符型,貌似宽度后面都有.,这个“.”,是必须加的,只要有宽度值,就必须加".",否则,让你看一下结果:

3.日期型输入格式

日期型输入格式有很多,下面列表展示了几种输入格式,其中w是表示日期的宽度,注意:这个宽度不能超过32

格式范围示例输入格式YYMMDDw.6~3220191208YYMMDD8.2019/12/08YYMMDD10.MMDDYYw.6~32120819MMDDYY6.12082019MMDDYY8.DDMMYYw.6~32081219DDMMYY6.08122019DDMMYY8.DATEw.7~3208DEC19DATE7.08DEC2019DATE9.MONYY7.5~32DEC19MONYY5.DEC2019MONYY7. 补充:特殊输入符:     ":"  和 "&" 1.冒号(:)的作用

先看下面的例子

这个结果怎么跟我想象中的不太一样,在SAS程序中,默认情况下:每个变量之间,不是有空格隔开了吗?我这也隔开了,怎么显示的数据这样? 

曰:SAS的默认,是默认不指定宽度,如果你指定了宽度,那么SAS就再也不是以默认的空格作为变量区分的标志了,而是按照指定的宽度来识别变量,例如:你对city这个变量指定了18,那么程序就会从头开始读取,直到18位结束才认为city的值,不管中间读到了什么,它都认为是city的值。这个时候冒号的作用就出来了,你在变量和输入格式之间加一个冒号,这个冒号就会告诉SAS,读取下一个变量,要么遇到空格,要么变量的宽度读完了,现在咱们再改一下这个程序,看看结果

2.&的作用

请先看一个示例:

友友们,可以看一下,如果咱们的数据有空格怎么办?在SAS程序中,一般空格时默认隔开的,但是实际的数据中,我们又想让它显示空格,这个时候,咱们需要&符号来救场,&符号可以处理空格,并且两个变量之间,必须用双空格,因为变量中有空格,所以现在一个空格无法识别是变量中的,还是默认分割符,所以这个时候需要用2个空格来作为默认分隔符,否则,可能会出现意想不到的结果,如果你想见识,可以多尝试一下,看看结果。

OK,到这一步,已经把输入格式化梳理完了,其实,简单来说,输入格式化,就是让SAS程序来按照这种格式去读数据,现在我们说一下输出格式化,输出嘛,非常简单,就是展示给别人看的。

SAS变量的输出格式化 

输出格式使用format语句来定义的.在input format 变量1 格式1 变量2 格式2  ...  

数值型的输出格式

数值型的输出格式有很多,其实,大体可分为三种:w.d、commaw.d和percentw.d

w.d的含义与输入格式中的w.d一样,commaw.d的作用是将数字的整数部分自右向左 每三位用逗号隔开,就是excel表格中千分位展示的那种类型。percentw.d的作用是将数据显示百分比的形式,它自动将变量乘以100,并加上%,看下面的一个示例:

由以上解释:

整型:sqnum这个是整型,宽度是5,实际数据都是3,所以都能完全展示

千分位:amt 宽度是7,小数点1位,千分位展示,可以看10000和15000,在amt中,数字加小数点的位数都已经7位了,所以千分位的逗号都没有展示出来,9000,长度短,所以千分位展示,可以比对amt1,所以如果要设定千分位展示时,想要把逗号都展示出来,必须考虑逗号,否则,可能还是按照原格式展示的

百分号:在rate的结果中,可以看出,%占了3个字节,长度不够时,会舍去数字,它跟千分位commaw.d不一样,千分位长度不够时,会舍去逗号,这两个要注意。

字符型输出格式

对于字符串变量来说,只要把变量正确的读取进来,则会一模一样的显示出来,所以在字符型中,无须设定输出格式。如果不设定的话,SAS的默认字符串长度是8.

日期型输出格式

日期型的输出格式和输入格式是一样的,不过输出格式可以在宽度值前面家伙是哪个一个字母,以区分各种显示形式。如下图所示:

字母输出格式显示s(/)YYMMDDs8.19/12/08d(-)YYMMDDd8.19-12-08p(.)YYMMDDp8.19.12.08c(:)YYMMDDc8.19:12:08b(空格)YYMMDDb8.19 12 08n(无)YYMMDDn8.20191208

 

总结:

在了解到输入格式和输出格式之后,有人会说,这两者在展示上,是一样的,那它们是不是一样的?在这里,我想说:它们实际上是不一样的,输入格式会改变变量的本身值,但是输出不会改变变量本身的值。请看下面的示例:

x设定了输出格式,长度是2,所以展示是2,但是它实际值不变,让它赋给c,所以c的值是zxy, 而y设定了输入格式,长度2,所以展示y的时候,输出也是2,把它赋给d,所以d也是2,即zx 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3